package com.tian.auto.model;

import com.tian.auto.Constants;
import com.tian.auto.Log;
import com.tian.auto.info.ResData;

import org.dom4j.Document;
import org.dom4j.Element;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

/**
 * 更新中文环境下的值的model
 */
public class CnUpdateModel extends AbsUpdateModel {

    private final static String TAG = CnUpdateModel.class.getSimpleName();

    public CnUpdateModel(ResData resData, HashMap<String, String> targetMap, List<String> xmlFilesPath) {
        super(resData, targetMap, xmlFilesPath);
    }

    @Override
    public void updateStringValues(Document document, Element element, String path) throws Exception {
        String cnValue = resData.getCnValue();

        if (!cnValue.equals(element.getStringValue())) {
            element.setText(cnValue);
            saveUpdateToXml(path, document);
        }
        resData.setCnValuePath(path);
        Log.info(TAG, element.getName() + "  " + element.attributes().get(0).getName() + " " + element.attributes().get(0).getValue() + " " + element.getStringValue());

    }

    @Override
    public void createXmlAndInsertStringValues(File file) throws Exception {
        Log.info(TAG, "在cn环境下一定存在target的字符串，如果打印了这句话说明出问题了");
        Constants.addErrorList("在cn环境下一定存在target的字符串，如果打印了这句话说明出问题了 targetKey=" + targetKey);

    }

    @Override
    public void updateStringArrayValues(Document document, Element element, String path) throws Exception {
        //注意在values string-array是肯定有定义的并且 数组长度是够的不存在补的问题，其他的2个目录不一定
        Iterator<Element> iterator = element.elementIterator("item");
        String cnValue = resData.getCnValue();
        int currentIndex = 0;
        while (iterator.hasNext()) {
            Element itemChild = iterator.next();
            try {
                //指定位置上的item的值是否和excel中定义的一至
                if (currentIndex == arrayIndex) {
                    if (!cnValue.equals(itemChild.getStringValue())) {
                        itemChild.setText(cnValue);
                        saveUpdateToXml(path, document);
                    }
                    resData.setCnValuePath(path);
                }
            } catch (Exception e) {
                e.printStackTrace();
                Constants.ERROR_LOG_LIST.add("cnValue==" + cnValue + ",path" + path);
            }

            currentIndex++;
        }

        //说明需要 去补数据
        if (arrayIndex > element.elements().size() - 1) {
            //需要补几个数据
            int count = arrayIndex + 1 - element.elements().size();
            for (int i = 0; i < count; i++) {
                element.addElement(Constants.ElementValues.ELEMENT_ITEM).setText(resData.getCnValue());
                saveUpdateToXml(path, document);
            }
            resData.setCnValuePath(path);
        }
    }

    @Override
    public void createXmlAndInsertStringArrayValues(File file) {
        Log.info(TAG, "在cn环境下一定存在target的字符数组，如果打印了这句话说明出问题了");
        Constants.addErrorList("在cn环境下一定存在target的字符串，如果打印了这句话说明出问题了 targetKey=" + targetKey);
    }
}
